home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / SRunMatGen.lha / MatrixGen.c < prev    next >
C/C++ Source or Header  |  1994-06-26  |  15KB  |  430 lines

  1. /*********************************/
  2. /* MatrixGenerator für ShadowRun */
  3. /* written by Thomas Reinhardt   */
  4. /*                               */
  5. /*     all rights reserved       */
  6. /*                               */
  7. /*     CPU - 1                   */
  8. /*     SPU - 2                   */
  9. /*     IOP - 3                   */
  10. /*     DS  - 4                   */
  11. /*     SAN - 5                   */
  12. /*     SN  - 6                   */
  13. /*********************************/
  14. #include <time.h>
  15. #include <math.h>
  16. #include <string.h>
  17. #include <exec/interrupts.h>
  18. #include <exec/libraries.h>
  19. #include <exec/lists.h>
  20. #include <exec/memory.h>
  21. #include <exec/nodes.h>
  22. #include <exec/ports.h>
  23. #include <exec/types.h>
  24. #include <intuition/intuition.h>
  25. #include <libraries/dos.h>
  26. #include <libraries/dosextens.h>
  27. #include <proto/dos.h>
  28. #include <proto/exec.h>
  29. #include <proto/graphics.h>
  30. #include <proto/intuition.h>
  31. #include <proto/gadtools.h>
  32. #include <proto/diskfont.h>
  33. #include <stdio.h>
  34. #include <stdlib.h>
  35.  
  36. #include "MatrixGen.h"
  37. #include "all.h"
  38.  
  39. LONG SaveNamePointer;
  40. struct IntuitionBase *IntuitionBase;
  41. struct GfxBase *GfxBase;
  42. struct Library *DosBase;
  43. struct NewScreen MyNewScreen;
  44. struct Screen *MyScreen;
  45. struct BitMapHeader BMHD;
  46. struct ColorRegister Colors[16];
  47. struct CommodoreAmiga CAMG;
  48. LONG Len,xi,yi,b;
  49. ULONG ChunkLen;
  50. char *WohinDamit;
  51. char GfxName[255];
  52. char StatusName[255];
  53. char StandardName[255];
  54. char TextName[255];
  55. char DatenFeld[255];
  56. BOOL success,AllDone;
  57. int i;
  58. char inread[5];
  59. int cBitmaps,AnzahlKnoten,AusgangsKnoten,AnzahlWichtigeDaten,Stufenwert;
  60. int MaxSAN,AusgangsWichtigeDaten;
  61. UBYTE xPos,yPos,MaxFarben,Language,OutputType;
  62. struct MatrixKomponenten Matrix[12*12];
  63. struct MatrixGenType MatrixDatas[1];
  64. BOOL CPUInSystem=FALSE,Beenden=FALSE,RandomDSValue,CheckLevelCode;
  65. BOOL Zufallsstufen,KeineDatenspeicher,StatusFile,PrefsFile,BlaueKnoten;
  66. BOOL Schatten,SaveDatenfeld,InstallNoIC,AlwaysICInfo,AlwaysICDS,LoadDataField;
  67. UBYTE AnzahlCPU,AnzahlSPU,AnzahlDS,AnzahlSAN,AnzahlSN,AnzahlIOP,AnzahlBlueNodes;
  68.  
  69. int main(int argc,char **argv){
  70.     srand((unsigned)time(NULL));
  71.     cBitmaps=4;
  72.     AnzahlKnoten=20;
  73.     MaxFarben=5;
  74.     Language=0;
  75.     OutputType=0;
  76.     Zufallsstufen=FALSE;
  77.     KeineDatenspeicher=FALSE;
  78.     AnzahlWichtigeDaten=5;
  79.     StatusFile=FALSE;
  80.     Zufallsstufen=TRUE;
  81.     Stufenwert=3;
  82.     MaxSAN=2;
  83.     RandomDSValue=FALSE;
  84.     PrefsFile=FALSE;
  85.     BlaueKnoten=FALSE;
  86.     Schatten=FALSE;
  87.     SaveDatenfeld=FALSE;
  88.     InstallNoIC=FALSE;
  89.     AlwaysICInfo=FALSE;
  90.     AlwaysICDS=FALSE;
  91.     LoadDataField=FALSE;
  92.     CheckLevelCode=FALSE;
  93.     strcpy(StandardName,"RAM:Matrix");
  94.     strcpy(StatusName,"RAM:Matrix.STAT");
  95.     strcpy(TextName,"RAM:Matrix.DOC");
  96.     strcpy(GfxName,"RAM:Matrix.IFF");
  97.     strcpy(DatenFeld,"RAM:Matrix.SRC");
  98.     if(strncmp(argv[1],"?",1)==0){
  99.         printf("USAGE\n");
  100.         printf(" MatrixGen -a <Nodes> -b -d -f -g -h -i <MaxData> -l <g> -m -n -r <Level>\n");
  101.         printf("           -s <Name> -t -u -v -x -z\n");
  102.         printf("OR\n");
  103.         printf(" MatrixGen -p    OR    MatrixGen -o <File>\n");
  104.         printf("\n");
  105.         printf("        -p/-P Using Prefs-File MatrixGen.pre\n");
  106.         printf("\n");
  107.         printf("        -a/-A Number Of Nodes In System (between 5 and 100)\n");
  108.         printf("        -b/-B Blue-Nodes (No IC, No Value, No Information)\n");
  109.         printf("        -c/-C Check Level and Code\n");
  110.         printf("        -d/-D save datafield of the program\n");
  111.         printf("        -f/-F Status-File-Name\n");
  112.         printf("        -g/-G German Version (purble/black nodes)\n");
  113.         printf("        -h/-H Draw Nodes With Shadow\n");
  114.         printf("        -i/-I Number Important Datas\n");
  115.         printf("        -l/-L Language [g(erman)]\n");
  116.         printf("        -m/-M Maximal Number Of SAN (1..10)\n");
  117.         printf("        -n/-N No Money in DS\n");
  118.         printf("        -o/-O load datafield of te program\n");
  119.         printf("        -r/-R Standard-Level For All Nodes\n");
  120.         printf("            2 - blue   3 - green         4 - orange\n");
  121.         printf("            5 - red    6 - purple(if -g) 7 - black(if -g)\n");
  122.         printf("        -s/-S Standard-Filename\n");
  123.         printf("        -t/-T Description-Output-Text (TeX)\n");
  124.         printf("        -u/-U IC protects always informationfiles\n");
  125.         printf("        -v/-V IC protects always money in datastore\n");
  126.         printf("        -x/-X No ICE in Nodes\n");
  127.         printf("        -z/-Z DS-Value +/- 10% Random, Size +/- 5Mp)");
  128.         printf("\n");
  129.         printf("Default : MatrixGen -a 20 -i 5 -m 2 -s RAM:Matrix\n");
  130.         exit(1);
  131.         }
  132.     for(yi=1;yi<argc;yi++){
  133.         if((strncmp(argv[yi],"-s",2)==0)|(strncmp(argv[yi],"-S",2)==0)){
  134.             strcpy(StandardName,argv[yi+1]);
  135.             strcpy(GfxName,StandardName);
  136.             strcat(GfxName,".IFF");
  137.             strcpy(TextName,StandardName);
  138.             strcat(TextName,".DOC");
  139.             }
  140.         }
  141.     if(((strncmp(argv[1],"-p",2)==0)||(strncmp(argv[1],"-P",2)==0))&&(argc>2))  DisplayErrorMessage("use -p without other options!");
  142.     if(((strncmp(argv[1],"-o",2)==0)||(strncmp(argv[1],"-O",2)==0))&&(argc>3))  DisplayErrorMessage("use -o without other options!");
  143.     if((strncmp(argv[1],"-p",2)==0)||(strncmp(argv[1],"-P",2)==0)) PrefsFile=TRUE;
  144.     if((strncmp(argv[1],"-o",2)==0)||(strncmp(argv[1],"-O",2)==0)){
  145.         LoadDataField=TRUE;
  146.         strcpy(DatenFeld,argv[2]);
  147.         }
  148.     if((LoadDataField==FALSE)&&(PrefsFile==FALSE)){
  149.         for(yi=1;yi<argc;yi++){
  150.             if((strncmp(argv[yi],"-a",2)==0)||(strncmp(argv[yi],"-A",2)==0)) stcd_i(argv[yi+1],&AnzahlKnoten);
  151.             }
  152.         for(yi=2;yi<argc;yi++){
  153.             if((strncmp(argv[yi],"-p",2)==0)||(strncmp(argv[yi],"-P",2)==0)) DisplayErrorMessage("option -p without other options!");
  154.             }
  155.         for(yi=2;yi<argc;yi++){
  156.             if((strncmp(argv[yi],"-o",2)==0)||(strncmp(argv[yi],"-O",2)==0)) DisplayErrorMessage("option -o without other options!");
  157.             }
  158.         for(yi=1;yi<argc;yi++){
  159.             if((strncmp(argv[yi],"-h",2)==0)||(strncmp(argv[yi],"-H",2)==0)) Schatten=TRUE;
  160.             }
  161.         for(yi=1;yi<argc;yi++){
  162.             if((strncmp(argv[yi],"-x",2)==0)||(strncmp(argv[yi],"-X",2)==0)) InstallNoIC=TRUE;
  163.             }
  164.         for(yi=1;yi<argc;yi++){
  165.             if((strncmp(argv[yi],"-c",2)==0)||(strncmp(argv[yi],"-C",2)==0)) CheckLevelCode=TRUE;
  166.             }
  167.         for(yi=1;yi<argc;yi++){
  168.             if((strncmp(argv[yi],"-u",2)==0)||(strncmp(argv[yi],"-U",2)==0)) AlwaysICInfo=TRUE;
  169.             }
  170.         for(yi=1;yi<argc;yi++){
  171.             if((strncmp(argv[yi],"-v",2)==0)||(strncmp(argv[yi],"-V",2)==0)) AlwaysICDS=TRUE;
  172.             }
  173.         for(yi=1;yi<argc;yi++){
  174.             if((strncmp(argv[yi],"-d",2)==0)||(strncmp(argv[yi],"-D",2)==0)) SaveDatenfeld=TRUE;
  175.             }
  176.         for(yi=1;yi<argc+1;yi++){
  177.             if((strncmp(argv[yi],"-b",2)==0)||(strncmp(argv[yi],"-B",2)==0)) BlaueKnoten=TRUE;
  178.             }
  179.         for(yi=1;yi<argc;yi++){
  180.             if((strncmp(argv[yi],"-i",2)==0)||(strncmp(argv[yi],"-I",2)==0)) stcd_i(argv[yi+1],&AnzahlWichtigeDaten);
  181.             }
  182.         for(yi=1;yi<argc;yi++){
  183.             if((strncmp(argv[yi],"-m",2)==0)||(strncmp(argv[yi],"-M",2)==0)){
  184.                 stcd_i(argv[yi+1],&MaxSAN);
  185.                 MaxSAN++;
  186.                 }
  187.             }
  188.         for(yi=1;yi<argc;yi++){
  189.             if((strncmp(argv[yi],"-f",2)==0)|(strncmp(argv[yi],"-F",2)==0)){
  190.                 strcpy(StatusName,StandardName);
  191.                 strcat(StatusName,".STAT");
  192.                 StatusFile=TRUE;
  193.                 }
  194.             }
  195.         for(yi=1;yi<argc+1;yi++){
  196.             if((strncmp(argv[yi],"-g",2)==0)||(strncmp(argv[yi],"-G",2)==0)) MaxFarben=7;
  197.             }
  198.         for(yi=1;yi<argc;yi++){
  199.             if((strncmp(argv[yi],"-l",2)==0)||(strncmp(argv[yi],"-L",2)==0)){
  200.                 if((strncmp(argv[yi+1],"g",1)==0)||(strncmp(argv[yi+1],"G",1)==0)) Language=1;
  201.                 else DisplayErrorMessage("option -l, unsupported language");
  202.                 }
  203.             }
  204.         for(yi=1;yi<argc+1;yi++){
  205.             if((strncmp(argv[yi],"-n",2)==0)||(strncmp(argv[yi],"-N",2)==0)) KeineDatenspeicher=TRUE;
  206.             }
  207.         for(yi=1;yi<argc+1;yi++){
  208.             if((strncmp(argv[yi],"-r",2)==0)||(strncmp(argv[yi],"-R",2)==0)){
  209.                 Zufallsstufen=FALSE;
  210.                 stcd_i(argv[yi+1],&Stufenwert);
  211.                 }
  212.             }
  213.         for(yi=1;yi<argc+1;yi++){
  214.             if((strncmp(argv[yi],"-t",2)==0)|(strncmp(argv[yi],"-T",2)==0)) OutputType=1;
  215.             }
  216.         for(yi=1;yi<argc+1;yi++){
  217.                 if((strncmp(argv[yi],"-z",2)==0)|(strncmp(argv[yi],"-Z",2)==0)) RandomDSValue=TRUE;
  218.             }
  219.         AusgangsWichtigeDaten=AnzahlWichtigeDaten;
  220.         if(AnzahlKnoten<5) DisplayErrorMessage("option -a, too few nodes");
  221.         if(AnzahlKnoten>100) DisplayErrorMessage("option -a, too much nodes");
  222.         if(AnzahlWichtigeDaten<0) DisplayErrorMessage("option -i, greater than 0");
  223.         if(AnzahlWichtigeDaten>100) DisplayErrorMessage("option -i, smaller than 100");
  224.         if(AnzahlWichtigeDaten>AnzahlKnoten) DisplayErrorMessage("option -i, not more than nodes (-a)");
  225.         if(MaxSAN<1) DisplayErrorMessage("option -m, greater than 0");
  226.         if(MaxSAN>20) DisplayErrorMessage("option -m, smaller than 20");
  227.         if(Stufenwert<2) DisplayErrorMessage("option -r, greater than 2");
  228.         if(Stufenwert>MaxFarben) DisplayErrorMessage("option -r, smaller than 5, or 7(if -g)");
  229.         AusgangsKnoten=AnzahlKnoten;
  230.         }
  231.     if(PrefsFile==TRUE) ScanPrefs();
  232.     DosBase=(struct Library *)OpenLibrary("dos.library",0L);
  233.     GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0L);
  234.     IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L);
  235.     if((DosBase==0)||(GfxBase==0)||(IntuitionBase==0)) DisplayErrorMessage("Error opening libraries");
  236.     if((DosBase==0)||(GfxBase==0)||(IntuitionBase==0)) DisplayErrorMessage("Error opening libraries");
  237.     MyNewScreen.LeftEdge=0;
  238.     MyNewScreen.TopEdge=0;
  239.     MyNewScreen.Width=xSize;
  240.     MyNewScreen.Height=ySize;
  241.     MyNewScreen.Depth=cBitmaps;
  242.     MyNewScreen.DetailPen=1;
  243.     MyNewScreen.BlockPen=0;
  244.     MyNewScreen.ViewModes=0;
  245.     MyNewScreen.ViewModes=0;
  246.     if(MyNewScreen.Width>320) MyNewScreen.ViewModes|=HIRES;
  247.     if(MyNewScreen.Height>256) MyNewScreen.ViewModes|=LACE;
  248.     MyNewScreen.Type=CUSTOMSCREEN;
  249.     MyNewScreen.Font=NULL;
  250.     MyNewScreen.DefaultTitle="Matrix-Generator V2.4 by Thomas Reinhardt";
  251.     MyNewScreen.Gadgets=NULL;
  252.     MyNewScreen.CustomBitMap=NULL;
  253.     MyScreen=OpenScreen(&MyNewScreen);
  254.     if(MyScreen==0) DisplayErrorMessage("No Screen ???");
  255.     ShowTitle(MyScreen,FALSE);
  256.     SetRGB4(&MyScreen->ViewPort,0,15*17,15*17,15*17);        /* weiß */
  257.     SetRGB4(&MyScreen->ViewPort,1,0*17,0*17,0*17);            /* schwarz */
  258.     Colors[0].rot=15*17;
  259.     Colors[0].gruen=15*17;
  260.     Colors[0].blau=15*17;
  261.     Colors[1].rot=0*17;
  262.     Colors[1].gruen=0*17;
  263.     Colors[1].blau=0*17;
  264.     SetRGB4(&MyScreen->ViewPort,2,0*17,0*17,15*17);        /* blau */
  265.     SetRGB4(&MyScreen->ViewPort,3,0*17,13*17,7*17);        /* grün */
  266.     SetRGB4(&MyScreen->ViewPort,4,15*17,9*17,0*17);        /* orange */
  267.     SetRGB4(&MyScreen->ViewPort,5,14*17,0*17,0*17);        /* rot */
  268.     SetRGB4(&MyScreen->ViewPort,6,15*17,0*17,15*17);    /* purpur */
  269.     SetRGB4(&MyScreen->ViewPort,7,0*17,0*17,0*17);        /* schwarz */
  270.     Colors[2].rot=0*17;
  271.     Colors[2].gruen=0*17;
  272.     Colors[2].blau=15*17;
  273.     Colors[3].rot=0*17;
  274.     Colors[3].gruen=13*17;
  275.     Colors[3].blau=7*17;
  276.     Colors[4].rot=15*17;
  277.     Colors[4].gruen=9*17;
  278.     Colors[4].blau=0*17;
  279.     Colors[5].rot=14*17;
  280.     Colors[5].gruen=0*17;
  281.     Colors[5].blau=0*17;
  282.     Colors[6].rot=15*17;
  283.     Colors[6].gruen=0*17;
  284.     Colors[6].blau=15*17;
  285.     Colors[7].rot=0*17;
  286.     Colors[7].gruen=0*17;
  287.     Colors[7].blau=0*17;
  288.     SetRGB4(&MyScreen->ViewPort,8,5*17,5*17,5*17);            /*  hellgrau  */
  289.     SetRGB4(&MyScreen->ViewPort,9,6*17,6*17,6*17);            /*     ..     */
  290.     SetRGB4(&MyScreen->ViewPort,10,7*17,7*17,7*17);            /*     ..     */
  291.     SetRGB4(&MyScreen->ViewPort,11,8*17,8*17,8*17);            /*     ..     */
  292.     SetRGB4(&MyScreen->ViewPort,12,9*17,9*17,9*17);            /*     ..     */
  293.     SetRGB4(&MyScreen->ViewPort,13,10*17,10*17,10*17);    /*     ..     */
  294.     SetRGB4(&MyScreen->ViewPort,14,11*17,11*17,11*17);    /*     ..     */
  295.     SetRGB4(&MyScreen->ViewPort,15,12*17,12*17,12*17);    /* dunkelgrau */
  296.     SetDrMd(&MyScreen->RastPort,JAM2);
  297.     Colors[8].rot=5*17;
  298.     Colors[8].gruen=5*17;
  299.     Colors[8].blau=5*17;
  300.     Colors[9].rot=6*17;
  301.     Colors[9].gruen=6*17;
  302.     Colors[9].blau=6*17;
  303.     Colors[10].rot=7*17;
  304.     Colors[10].gruen=7*17;
  305.     Colors[10].blau=7*17;
  306.     Colors[11].rot=8*17;
  307.     Colors[11].gruen=8*17;
  308.     Colors[11].blau=8*17;
  309.     Colors[12].rot=9*17;
  310.     Colors[12].gruen=9*17;
  311.     Colors[12].blau=9*17;
  312.     Colors[13].rot=10*17;
  313.     Colors[13].gruen=10*17;
  314.     Colors[13].blau=10*17;
  315.     Colors[14].rot=11*17;
  316.     Colors[14].gruen=11*17;
  317.     Colors[14].blau=11*17;
  318.     Colors[15].rot=12*17;
  319.     Colors[15].gruen=12*17;
  320.     Colors[15].blau=12*17;
  321.     BMHD.w=xSize;
  322.     BMHD.h=ySize;
  323.     BMHD.x=0;
  324.     BMHD.y=0;
  325.     BMHD.nPlanes=cBitmaps;
  326.     BMHD.pad1=0;
  327.     BMHD.transparentColor=0;
  328.     BMHD.xAspect=0;
  329.     BMHD.yAspect=0;
  330.     BMHD.Width=xSize;
  331.     BMHD.Height=ySize;
  332.     if(LoadDataField==TRUE){
  333.         LoadData(DatenFeld);
  334.         }
  335.     else{
  336.         MatrixDatas[0].Version=MGVersion;
  337.         MatrixDatas[0].Revision=MGRevision;
  338.         MatrixDatas[0].xLength=12;
  339.         MatrixDatas[0].yLength=12;
  340.         MatrixDatas[0].Speak=Language;
  341.         MatrixDatas[0].cBitmaps=cBitmaps;
  342.         MatrixDatas[0].AnzahlKnoten=AnzahlKnoten;
  343.         MatrixDatas[0].AusgangsKnoten=AusgangsKnoten;
  344.         MatrixDatas[0].AnzahlWichtigeDaten=AnzahlWichtigeDaten;
  345.         MatrixDatas[0].Stufenwert=Stufenwert;
  346.         MatrixDatas[0].MaxSAN=MaxSAN;
  347.         MatrixDatas[0].AusgangsWichtigeDaten=AusgangsWichtigeDaten;
  348.         MatrixDatas[0].MaxFarben=MaxFarben;
  349.         MatrixDatas[0].OutputType=OutputType;
  350.         MatrixDatas[0].CPUInSystem=CPUInSystem;
  351.         MatrixDatas[0].Beenden=Beenden;
  352.         MatrixDatas[0].RandomDSValue=RandomDSValue;
  353.         MatrixDatas[0].Zufallsstufen=Zufallsstufen;
  354.         MatrixDatas[0].KeineDatenspeicher=KeineDatenspeicher;
  355.         MatrixDatas[0].StatusFile=StatusFile;
  356.         MatrixDatas[0].PrefsFile=PrefsFile;
  357.         MatrixDatas[0].BlaueKnoten=BlaueKnoten;
  358.         MatrixDatas[0].Schatten=Schatten;
  359.         MatrixDatas[0].SaveDatenfeld=SaveDatenfeld;
  360.         MatrixDatas[0].InstallNoIC=InstallNoIC;
  361.         MatrixDatas[0].AlwaysICInfo=AlwaysICInfo;
  362.         MatrixDatas[0].AlwaysICDS=AlwaysICDS;
  363.         for(yi=0;yi<12;yi++){
  364.             for(xi=0;xi<12;xi++){
  365.                 Matrix[xi+yi*12].Belegt=FALSE;
  366.                 Matrix[xi+yi*12].Type=0;
  367.                 Matrix[xi+yi*12].Nummer=0;
  368.                 if(Zufallsstufen==FALSE) Matrix[xi+yi*12].Secure=Stufenwert;
  369.                 else Matrix[xi+yi*12].Secure=0;
  370.                 Matrix[xi+yi*12].Stufe=0;
  371.                 Matrix[xi+yi*12].Datenwert=0;
  372.                 Matrix[xi+yi*12].Datensize=0;
  373.                 Matrix[xi+yi*12].WichtigeDaten=FALSE;
  374.                 Matrix[xi+yi*12].ICType=0;
  375.                 Matrix[xi+yi*12].ICArt=0;
  376.                 Matrix[xi+yi*12].N=FALSE;
  377.                 Matrix[xi+yi*12].NO=FALSE;
  378.                 Matrix[xi+yi*12].O=FALSE;
  379.                 Matrix[xi+yi*12].SO=FALSE;
  380.                 Matrix[xi+yi*12].S=FALSE;
  381.                 Matrix[xi+yi*12].SW=FALSE;
  382.                 Matrix[xi+yi*12].S=FALSE;
  383.                 Matrix[xi+yi*12].NW=FALSE;
  384.                 }
  385.             }
  386.         MatrixGenerierung();
  387.         MatrixKorrektur();
  388.         MatrixEditKanten();
  389.         MatrixStufe();
  390.         MatrixCheckLevelCode();
  391.         MatrixDatenspeicher();
  392.         MatrixInstallIC();
  393.         }
  394.     MatrixDarstellung();
  395.     MatrixNummerierung();
  396.     SaveIFF(GfxName);
  397.     if(SaveDatenfeld==TRUE) SaveData(DatenFeld);
  398.     StatusAusgabe(StatusName);
  399.     SaveText();
  400.     DisplayErrorMessage("IFF and Text saved ...");
  401.     }
  402.  
  403. void DisplayErrorMessage(char *Meldung){
  404.     printf("%s\n",Meldung);
  405.     if(SaveNamePointer) Close(SaveNamePointer);
  406.     if(MyScreen) CloseScreen(MyScreen);
  407.     if(DosBase) CloseLibrary(DosBase);
  408.     if(GfxBase) CloseLibrary((struct Library *)GfxBase);
  409.     if(IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
  410.     exit(TRUE);
  411.     }
  412.  
  413. void AusgabeText(ULONG xW,ULONG yW,ULONG farbe,char *ThisText){
  414. LONG zwsp;
  415. char HelpText[10];
  416. struct IntuiText OutputText[1];
  417.     strcpy(HelpText,ThisText);
  418.     OutputText[0].FrontPen=farbe;
  419.     OutputText[0].BackPen=0;
  420.     OutputText[0].DrawMode=JAM1;
  421.     OutputText[0].LeftEdge=xW+15;
  422.     OutputText[0].TopEdge=yW-3;
  423.     OutputText[0].ITextFont=0;
  424.     OutputText[0].NextText=NULL;
  425.     OutputText[0].IText=HelpText;
  426.     zwsp=IntuiTextLength(&OutputText[0])/2;
  427.     OutputText[0].LeftEdge-=zwsp;
  428.     PrintIText(&MyScreen->RastPort,&OutputText[0],0,0);
  429.     }
  430.